package part8;

/**
 * @author wcj
 * @Date 2021/5/16 16:29
 * @Version 1.0
 */
public class Part81 {

    public static void main(String[] args) {
        // 利用了Java中的多态思想，即自动向上转型
        // 如果没有这种思想，我们思考一下，如果有更多的乐器，那么我们就需要进行方法重载，为每个乐器编写一个play方法
        // 但是有了多态之后，我们只需要提供一个包含基类参数的方法，传入不同的导出类对象即可完成导出类的特定动作
        // 多态使得代码更加简洁,同时多态是一种能够将改变的事物和未变的事物分离开来的技术，例如乐器中存在一个play函数，即便我们
        // 再在基类中添加新的方法，也不会影响到原来的play方法
       Wind wind = new Wind();
        tune(wind);
    }

    public static void tune(Instrument i){
        i.play(Note.Middle);
    }

}

class Wind extends Instrument {

    @Override
    public void play(Note i) {
        System.out.println("Wind play:" + i);
    }
}

class Instrument {
    public void play(Note n) {
        System.out.println("instrument play");
    }
}

enum Note {
    /**
     * MIDDLE
     */
    Middle,

    /**
     * LARGE
     */
    LARGE,

    /**
     * LARGER
     */
    LARGER
}
